import { ListNode } from './00-utils';
/**
 * 删除有序链表中的重复项
 * @param head
 */
function deleteDuplicates(head: ListNode) {
  let cur = head;
  while (cur && cur.next) {
    if (cur.val == cur.next.val) {
      cur.next = cur.next.next;
    } else {
      cur = cur.next;
    }
  }
  return head;
}
const l1 = new ListNode(1);
l1.next = new ListNode(1);
l1.next.next = new ListNode(2);
console.log(deleteDuplicates(l1));

// ：给定一个排序链表，删除所有含有重复数字的结点，只保留原始链表中 没有重复出现的数字

// 使用虚拟头结点帮助删除重复项

function deleteDuplicates1(head) {
  // 0个或者1个节点肯定不会重复,直接原样返回
  if (!head || !head.next) return head;
  // 创建虚拟节点
  const dummy = new ListNode(0);
  dummy.next = head;
  let cur = dummy;
  // 开始循环,保证指针节点后有两个节点
  while (cur.next && cur.next?.next) {
    //  对 cur 后面的两个结点进行比较
    if (cur.next.val === cur.next.next.val) {
      // 记下这个重复的值
      const val = cur.next.val;
      // 继续比较后续 反复地排查后面的元素是否存在多次重复该值的情况
      while (cur.next && cur.next.val == val) {
        cur.next = cur.next.next;
      }
    } else {
      cur = cur.next;
    }
  }
  return dummy.next;
}
